// 配置请求
import Vue from 'vue'
import axios from 'axios'
import url from '../../config'
axios.defaults.baseURL = url.baseUrl
// axios.defaults.timeout = 30000
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
Vue.prototype.$http = axios

// 请求拦截器
axios.interceptors.request.use(
    config => {
        // console.log(config);
        // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
        // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
        let token = window.localStorage.getItem('token');
        if (config.url.indexOf("token") >-1 || token == null) {
        config.headers.token = 'null token'
        } else {
        config.headers.token = token
        }
        return config;
    },
    error => {
        return Promise.error(error)
})

// 响应拦截器
axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response)
        } else {
            return Promise.reject(response)
        }
    },
    // 服务器状态码不是200的情况
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 401:
                    router.push({
                        path: '/login'
                    })
                    break;
                case 403:
                    console.log('权限不足，不允许访问');
                    break;
                // 404请求不存在
                case 404:
                    console.log('网络请求不存在');
                    break;
                // 其他错误，直接抛出错误提示
                default:
                console.log('error.response.statusText');
            }
            return Promise.reject(error.response)
        }
    }
)
